# *-*- coding:utf-8 -*-
# @Author  : Eliza
# @Time    : 2021/7/18 16:41
# @Software : RubyMine

class A1
  @@a1 = "a1"
  # 实例方法

  def a11Get
    @@a1
  end

  def a11Set(a)
    @@a1 = a
  end

  def show
    puts "#{@@a1}"
  end

  private :a11Set

  class << self
    def a1Get
      @@a1
    end

    def a1Set(a1)
      @@a1 = a1
    end
  end

end

puts "----A1------"
A1.a1Set("1")
A1.a1Get
puts "----a1------"

a1 = A1.new
# a1 不能对a1Get(class method)进行操作
puts A1.a1Get
puts "----a1------"
puts a1.a11Get

# a1.a11Set("oppppp") #被定义为一个 private方法 ，只有A1 能使用，其余一律不可以使用
puts a1.a11Get
# A1与a1 修改同一个@@a1
#
class A2 < A1
  attr_accessor :a #实例属性
  @a = 1

  def show #同名即重写了 父类方法
    super
    puts @a.to_s + ":show"
  end

  def show1()
    puts @a.to_s + ":show1"
  end
end

puts "----A2------"
puts A2.a1Get
A2.a1Set(1)
# 无法使用A1的实例方法，class!->object
puts "----a2------"

a2 = A2.new
puts "#{a1.a11Get }, #{a2.a11Get}"
a2.show1
a2.show
a2.a = 2
puts a2.a
# puts A2.a11Get
a3 = A2.new()